package com.hqyj.freemovie.front.controller;

import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.hqyj.freemovie.front.domain.Users;
import com.hqyj.freemovie.front.json.R;
import com.hqyj.freemovie.front.service.UsersService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

@RestController
@RequestMapping("users")
public class UsersController extends BaseController {

    @Resource
    private UsersService usersService;

    @GetMapping("auth")
    public R login(HttpServletRequest request, @RequestParam("identify") String identify, @RequestParam("password") String password, @RequestParam("code") String randomCode, @RequestParam("token") String token) {
        Users loginSuccessUser = null;
        try {
            //首先要检查验证码
            if(request.getServletContext().getAttribute(token)==null){
                //
                return R.fail("验证码验证失败！");
            }

            String applicationRandomCode = (String)request.getServletContext().getAttribute(token);
            if(!randomCode.equalsIgnoreCase(applicationRandomCode)){
                return R.fail("验证码验证失败！");
            }

            if ((loginSuccessUser = usersService.login(identify, password)) != null) {

                //这里使用sa-token保存登录成功的用户状态。
                StpUtil.login(loginSuccessUser.getUid());
                //服务器已经生成一个令牌。
                //必须要返回给客户端。客户端必须获取这个令牌，保存起来。
                SaTokenInfo tokenInfo =StpUtil.getTokenInfo(); //会员卡的信息。
                loginSuccessUser.setTokenName(tokenInfo.getTokenName()); //"洗浴中心的名字"
                loginSuccessUser.setTokenValue(tokenInfo.getTokenValue()); //"会员卡号"

                loginSuccessUser.setPassword("");
                return R.success("登录成功！", loginSuccessUser);
            }
            return R.fail("登录失败，请检查用户名或者密码是否正确！");
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    // 查询登录状态，浏览器访问： http://localhost:8081/user/isLogin
    @GetMapping("isLogin")
    public R isLogin() {
       try {
           return R.success("获得登录状态成功", StpUtil.isLogin()); //true 表示已登录，false 未登录
       }catch(Exception ex){
           ex.printStackTrace();
           return R.error("程序出现异常！");
       }
    }


    @GetMapping("/logout")
    public R logout(){
        try{
            StpUtil.logout(); //服务器已经把用户的登录状态删除了....

            return R.success("注销成功！");
        }catch(Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    @PostMapping("/")
    public R reg(@RequestBody Users u) {
        try {
            if (usersService.reg(u)) {
                return R.success("注册成功！");
            }
            return R.fail("注册失败！");
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    @GetMapping("/isReg")
    public R mobileIsReg(@RequestParam("mobile") String mobile){
        try{
           boolean flag =  usersService.checkMobileIsReg(mobile);
           return R.success("检查手机注册状态信息成功！",flag);
        }catch (Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }
}
